The proliferation of computers and the advent of the Internet and the maturing of the World Wide Web (“web”) have resulted in the development of new and improved software applications for both business and personal uses. Examples of software applications include collaboration applications, chat room applications, instant messaging applications, conferencing applications, gaming applications, and the like. These software applications are commonly based on the client-server paradigm, where the software application or system is split between server tasks and client tasks. In client-server terminology, the client sends a request to the server, according to some protocol, typically asking the server to perform an action and the server responds to the client's request. These servers are often tested prior to commercial release in order to ensure proper operation of the servers.
One aspect of application testing focuses on ensuring reliable operation of a server under anticipated loads. Load testing is a process by which a server is tested under load—i.e., stress—that the server is likely to experience in a real operation environment. Load tests are end-to-end performance tests that test the server under an anticipated production load, which is typically based on a prediction of how the end users—i.e. clients—would use the server. One objective of the load tests is to measure the capability of the server to function correctly under load. Another objective of the load tests is to determine the response times—i.e., performance—for various operations performed by the server.
There are a number of traditional approaches to measuring the performance of a server. One approach is to use measurement tools that execute on the server, and which allows for the measurement of the time duration between when the server receives a command request until when the server responds with a command response. While this approach may be adequate for measuring performance within the server, this approach does not provide a true end-to-end performance measurement since it fails to account for the time taken for the command request to go from an issuing client to the server, and the time taken for the command response to go from the server to the clients that are affected by the command request—i.e., the clients that should receive a response from the server as a result of the command request.
Another approach is to use measurement tools that execute on the client, and which allow for the measurement of the time duration between when the client issues a command request to a server until when the client receives a command response from the server. This approach may be adequate for measuring the performance of requests that only affect the issuing client if the client does not make further command requests to the server until receiving the command response to the first command request. This is because the command response does not identify the client that originally made the command request that caused this command response. Even if this approach may be adequate for measuring the performance of commands that only affect the issuing client, this approach does not provide a true end-to-end performance measurement of commands that affect clients other than the issuing client for at least the reason stated above.
It would be desirable to have a technique that allows for measuring performance characteristics in a client-server environment without requiring the server to correlate command responses to command requests.